perm filename BUDGET.DOC[PRO,HE]2 blob
sn#638671 filedate 1982-01-29 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00015 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 The BUDGET program.
C00008 00003 The budget program:
C00024 00004 Sample input file.
C00025 00005 Sample run of the BUDGET command.
C00027 00006 Sample run of the PROJECT command.
C00031 00007 Interactive commands: lumped.
C00033 00008 Interactive commands: CLEAR.
C00034 00009 Interactive commands: EXE.
C00040 00010 Interactive commands: OVERHEAD. (Also, the INDIRECT command.)
C00041 00011 Interactive commands: PROJECT.
C00043 00012 Interactive commands: STATUS.
C00045 00013 Appendix 1. Detailed budget for inclusion in an NSF proposal.
C00049 00014 Appendix 2. Skeleton budget as produced by BUDGET.
C00052 00015 Archived announcements of BUDGET updates.
C00057 ENDMK
C⊗;
The BUDGET program.
This program was written and is maintained by BIS@SU-AI.
Send suggestions, complaints, and bugs to him.
The mailing list for updates on the BUDGET program is BUDGET.DIS[DIS,BIS].
Feel free to add or delete your name.
Update announcements are archived at the end of this DOC file.
The budget program:
Overview.
Grant proposals require detailed budgets like that shown in Appendix 1.
The BUDGET program is designed to aid in producing such budgets.
BUDGET takes an input file which details the line items of a budget
(salaries, percentages, dates of employment, capital expenditures and dates,
foreign travel estimates, etc) and produces a skeleton budget like that
shown in Appendix 2.
Some editing of the skeleton budget is required before it can be included
in a proposal:
1. Full names of senior personnel must be typed in, along with their
percentages. For faculty, one must detail academic year versus
summer.
2. The numbers must be rounded, the addition corrected, and commas
inserted after the thousands digit. (This will be done automatically
in a future version of BUDGET.)
3. Other things must be typed in, as the reader can see.
Despite the fact that a skeleton budget must be edited before it can be
included in a proposal, the BUDGET program is useful because it allows
easy experimentation with different line items.
The program takes care of some messy details. Student salaries are
presumed to inflate by 10% on 01 October. Faculty and staff salaries are
presumed to inflate by 10% on 01 September. The University's Staff
Benefit Rate changes on 01 September. Students work 50% time during their
academic year (October thru June) and 100% time during their summer (July
thru September). But for faculty, `academic year' means September thru
May. Charges for the SAIL cost center are presumed to inflate by 10%
on calendar year boundaries (January).
Our most recent NSF proposal ran from November thru October. Hand
calculations of salaries alone would have required four separate periods:
November thru June; July thru August; September; October. BUDGET yields
precise budget totals based on input specs. If you don't like the totals,
then change the inputs specs and run BUDGET again. The last NSF proposal
went thru 19 such iterations. BUDGET saved considerable time over pencil
and paper calculations.
Using BUDGET.
BUDGET is written in MACLISP and sits on top of ACRONYM, a package of
LISP utility routines. In this section we provide an annotated dialog
in which BUDGET is used.
First of all, you have to prepare a file of input specifications which
detail the line items of the budget. We will discuss such a file in
a later section of this document. For the moment, we will presume that
the user's file SAMPLE.IN is a file of such input specs.
To load the BUDGET program, type
.r acronym;budget[sys,bis]
which loads BUDGET on top of ACRONYM. The program will respond
Hi there, Barry
You are using an ACRONYM created on 05/01/80 at 06:16:16 by ROD
Running: BUDGET.ACR[SYS,BIS]
Fasloaded file: BUD013.FAS[SYS,BIS]
*
The `*' means that ACRONYM is ready for input. BUDGET is invoked by typing
(budget)<cr>
The program responds with
Welcome to BUDGET
and issues the standard prompt
How may I serve you, Master?
We need to read the input file which we have prepared. The READ command
takes care of this, so we type
How may I serve you, Master? READ<cr>
at the end of the prompting line. (By the way, BUDGET is perfectly happy
to accept type-ahead.) The READ command requires the name of the input
file as an argument, so we answer the next prompt
Input data file? SAMPLE<cr>
BUDGET now reads this file. It presumes that the extension is IN and that
the file is located under your currently ALIASed area. You can type in the
name of any SAIL file. The program reports its reading with a line like
Reading IN file: SAMPLE.IN[BUD,BIS]
If there are errors in the syntax of your input file, they will be reported.
Now we are ready to ask the program to crunch for us. The BUDGET command
does this:
How may I serve you, Master? BUDGET<cr>
This command requires a period for which the budget is to be prepared.
In this case we can type `FIRST-YEAR' since this period has been defined
in the input file (we'll show how later).
For what period or month? FIRST-YEAR<cr>
Now BUDGET needs the name of an output file. We'll type SAMPLE, and this
will default to the file SAMPLE.OUT under our currently ALIASed area:
File name? SAMPLE<cr>
Writing OUT file: SAMPLE.OUT[BUD,BIS]
Successful!
The message `Successful!' is printed if all goes well. If not (and there
are lots of ways you can screw up), it will tell you that there were errors
and that you should check the output file for details.
We exit the BUDGET program by typing
How may I serve you, Master? STOP<cr>
to which BUDGET replies
It has been our pleasure...
*
The `*' means we're at top-level LISP. Now we have to gracefully leave
the ACRONYM environment. This is done by typing
(kwit)<cr>
to which comes the reply
Exit
↑C
.
That's how you use BUDGET!
The following pages explain the two important things you need to know:
(1) how to write input files which specify salaries, line items, and
hirings; and (2) other commands which the BUDGET program understands.
Syntax of Input Files.
Here is a list of the types of statements which may occur in an input file
for BUDGET.
TITLE statements allow you to put the name of the grant or contract
into the output file. The statement
(title NSF-78)
will label all output pages with the phrase `NSF-78.' If you don't
specify a TITLE, then `UNTITLED' will be used.
PERIOD statements allow you to name periods of time. For example, the
statement
(period FIRST-YEAR ((11 80)(10 81)))
will allow you to use the phrase `FIRST-YEAR' instead of writing the
cumbersome expression ((11 80)(10 81)).
SALARY statements define a person's salary during a specified PERIOD.
Typical SALARY statements are:
(salary BINFORD ((09 79)(08 80)) (2000 monthly))
(salary SOROKA ((09 79)(08 80)) (1000 monthly))
(salary ROD ((10 79)(09 80)) (1074 monthly))
(salary ROD ((10 80)(09 81)) (1202 monthly))
See a later section of this document (How Salaries are Computed) for
some more details on this.
EMPLOY statements declare our intent to hire a certain percentage of a
person for a specified period of time. For example,
(employ BINFORD FIRST-YEAR 10 sen)
declares that we want to hire BINFORD at 10% for the period we named
FIRST-YEAR; his salary is to be included in that of Senior Personnel.
Other categories are SRA for Student Research Assistants and SUP for
Support Personnel.
Students are typically hired in a kooky fashion:
(employ STU ((10 80)(06 81)) 50 sra)
(employ STU ((07 81)(09 81)) 100 sra),
since they work full-time during their summer and half-time during
their academic year.
CAP statements declare our intent to purchase capital equipment on
a certain date at a certain price. An example is:
(cap SKY-HOOK (11 80) 41500).
EXP statements declare estimated costs for expendable items. Examples:
(exp ( 50.00 monthly) TOTAL pencils)
(exp ( 200.00 monthly) (01 80) paper)
PUB statements declare estimted costs for publication. An example is:
(pub (2226.00 yearly) FIRST-YEAR page-charges).
COMM statements declare estimated costs for communications (telephone).
An example is:
(comm (1785.00 yearly) FIRST-YEAR telephone).
MER statements declare estimated costs for minor equipment and repair.
An example is:
(mer (4221.00 yearly) FIRST-YEAR).
DOM statements declare estimated costs for domestic travel:
(dom (4200.00 yearly) FIRST-YEAR estimated).
FOR statements declare estimated costs for foreign travel:
(for (1600.00 monthly) (10 80) acapulco).
COMP statements declare estimated costs for computer services:
(comp ( 880.64 monthly) CAL-1980 csd-cf).
Note that this statement uses CAL-1980 as an abbreviation for the cumbersome
expression ((01 80)(12 80)). This would be accomplished by a PERIOD statement
like:
(period CAL-1980 ((01 80)(12 80))).
How salaries are computed.
Recall that salaries are declared with statements of the form:
(salary ROD ((10 79)(09 80)) (1074 monthly))
(salary ROD ((10 80)(09 81)) (1202 monthly))
When the BUDGET or PROJECT commands need to know ROD's salary for an
arbitrary month, they first ask if it was explicitly declared with a
SALARY record. If so, then the explicit value is used. If not, then
a similar look-up is performed for the same month of the previous year;
if it's found, then it's inflated by 10%. If not, then we go back yet
another year and inflate by 10% and then another 10%. And so forth.
Recall that the salaries of students change on 01 October, while
the salaries of senior personnel and support staff change on 01 September.
This the user must effect by declaring the SALARY for the appropriate
period. The declarations shown above will accomplish this for ROD,
a student. To accomplish the same thing for Professor Foo, use
(salary FOO ((09 79)(08 80)) (3000 monthly)).
His salary for (09 79) is $3000/month computed directly.
His salary for (09 80) is 1.1*$3000/month = $3300/month.
And so forth.
Sample input file.
Check out SAMBUD.IN[SYS,BIS].
This file can be used either for the BUDGET command or the PROJECT command.
Note that anything following a semi-colon (;) is ignored by LISP.
This allows one to insert comments into input specification files.
The input language is not perfect, by any means, and lots of things are
awkwardly phrased. Suggestions for improvements are welcome.
You might want to get started with BUDGET by copying SAMBUD.IN[SYS,BIS] as a
template and then editing its entries to whatever you want for your specific
budget or projection.
Sample run of the BUDGET command.
Input file: SAMBUD.IN[SYS,BIS]
Output file: SAMBUD.OUT[SYS,BIS]
Dialog:
.da
Thursday 31-Jul-80 02:45 74F 23C
[ Load BUDGET ]
.r acronym;budget[sys,bis
Hi there, Barry
You are using an ACRONYM created on 07/30/80 at 23:07:40 by ROD
Running: BUDGET.ACR[SYS,BIS]
Fasloaded file: BUD020.FAS[SYS,BIS]
*
[ `*' means LISP is waiting.
Invoke the BUDGET program. ]
(budget)
Welcome to BUDGET
[ Read the input data declarations. ]
How may I serve you, Master? read
Input data file? sambud
[ Notice that the extension defaults to IN. ]
Reading IN file: SAMBUD.IN[SYS,BIS]
[ Let's turn MONTHLY ON so we get more details and not just a summary. ]
How may I serve you, Master? monthly
On or off? on
[ OK, let's do the BUDGET for the PERIOD called TOTAL. ]
How may I serve you, Master? budget
For what period or month? total
File name? sambud
[ Notice that the extension defaults to OUT. ]
Writing OUT file: SAMBUD.OUT[SYS,BIS]
Successful!
[ After seeing `Successful' you can just call out of LISP if you're
impatient. Otherwise, the following commands get you out gracefully. ]
How may I serve you, Master? quit
It has been our pleasure...
*
(kwit)
Exit
↑C
.
Sample run of the PROJECT command.
Input files: SAMBUD.IN[SYS,BIS]
SAMBUD.GS[SYS,BIS]
Output file: SAMPRO.OUT[SYS,BIS]
Dialog:
.da
Thursday 31-Jul-80 02:27 73F 23C
[ Load BUDGET ]
.r acronym;budget[sys,bis
Hi there, Barry
You are using an ACRONYM created on 07/30/80 at 23:07:40 by ROD
Running: BUDGET.ACR[SYS,BIS]
Fasloaded file: BUD020.FAS[SYS,BIS]
*
[ `*' means LISP is waiting.
Invoke the BUDGET program. ]
(budget)
Welcome to BUDGET
[ Read the input data declarations. ]
How may I serve you, Master? read
Input data file? sambud
[ Notice that the extension defaults to IN. ]
Reading IN file: SAMBUD.IN[SYS,BIS]
[ Use EXE to answer the queries about GRANT-STATUS. ]
How may I serve you, Master? exe
Command file? sambud.gs
[ Now we get to watch the prompts which are being answered by
the GS file. ]
Reading EXE file: SAMBUD.GS[SYS,BIS]
How may I serve you, Master? At the end of what (month year) is this status val
id? Salaries and Wages, to date? Salaries and Wages, budgeted? Staff Benefits
, to date? Staff Benefits, budgeted? Capital Expenditures, to date? Capital E
xpenditures, budgeted? Travel, to date? Travel, budgeted? Other Expenses, to
date? Other Expenses, budgeted? Indirect Costs, to date? Indirect Costs, budg
eted?
[ Let's turn MONTHLY ON so we get more details and not just a summary. ]
How may I serve you, Master? monthly
On or off? on
[ OK, let's do the PROJECTion for the PERIOD called TOTAL. ]
How may I serve you, Master? project
For what period or month? total
File name? sampro
[ Notice that the extension defaults to OUT. ]
Writing OUT file: SAMPRO.OUT[SYS,BIS]
Successful!
[ After you see `Successful!' you can exit with ↑C if you're impatient.
Otherwise, the following will get you gracefully out of LISP. ]
How may I serve you, Master? quit
It has been our pleasure...
*
(kwit)
↑C
.
Interactive commands: lumped.
MONTHLY controls the printing of monthly budgets for a period. Prompts for
`ON' or `OFF.' If you have said `MONTHLY ON,' then the output file
for a long period (say the FIRST-YEAR) will contain one page per
month of the period as well as the totals for the whole period.
This is helpful in understanding what the program is doing.
STOP exits BUDGET to LISP. Equivalent commands are EXIT, HALT, and QUIT.
READ orders the reading of an input specification file. Prompts for a
file name.
BUDGET commands the program to produce a budget. Prompts for a period
and then an output file name. A period may be either (1) a
month, like (10 80); (2) an explicit period, like ((10 80)(5 83));
or (3) the name of a period which was declared in the input file,
like FIRST-YEAR.
Interactive commands: CLEAR.
This command wipes all data from the BUDGET program. This allows the user
to read a completely new set of data.
Interactive commands: EXE.
The EXE command tells BUDGET to takes its commands from a disk file
instead of from the terminal.
This is very useful when you want to give the same set of commands
many times in a row. For example, a typical use of BUDGET is to produce
acceptable budgets for the NSF. The steps in the process are:
(1) Create a file NSF.IN, say, specifying a tentative budget.
(2) Run BUDGET on NSF.IN creating, say, NSF.OUT.
(3) Examine NSF.OUT; if it's ok then exit, otherwise continue with Step 4.
(4) Alter NSF.IN attempting to make a better budget.
(5) Go to Step 2.
The EXE command makes Step 2 easier.
A typical terminal session would look like this:
.r acronym;budget[sys,bis
Hi there, Barry
You are using an ACRONYM created on 07/30/80 at 23:07:40 by ROD
Running: BUDGET.ACR[SYS,BIS]
Fasloaded file: BUDGET.FAS[SYS,BIS]
*
(budget)
Welcome to BUDGET
How may I serve you, Master? read
Input data file? sambud
Reading IN file: SAMBUD.IN[SYS,BIS]
How may I serve you, Master? monthly
On or off? on
How may I serve you, Master? budget
For what period or month? total
File name? sambud
Writing OUT file: SAMBUD.OUT[SYS,BIS]
Successful!
How may I serve you, Master? quit
It has been our pleasure...
*
(kwit)
Exit
↑C
.
Here are the BUDGET commands that the user had to type:
read
sambud
monthly
on
budget
total
sambud
quit
The EXE command allows the user to put this set of commands into a file
so that BUDGET will obey them when he gives that file name to the EXE command.
There's one minor detail: BUDGET reads file names from files DIFFERENTLY
than when it reads file names from the terminal. In particular, you have
to describe file names as
(file ext dev (p pn))
where SAMBUD.IN[SYS,BIS] would become (SAMBUD IN DSK (SYS BIS)) for example.
So, the above noted command sequence would be written into a disk file as:
read
(sambud in dsk (sys bis))
monthly
on
budget
total
(sambud out dsk (sys bis))
quit
The disk file SAMBUD.EXE[SYS,BIS] contains that text.
Here's what it looks like to use the EXE command during a run of BUDGET:
.r acronym;budget[sys,bis
Hi there, Barry
You are using an ACRONYM created on 09/19/80 at 16:32:27 by ROD
Running: BUDGET.ACR[SYS,BIS]
Fasloaded file: BUDGET.FAS[SYS,BIS]
*
(budget)
Welcome to BUDGET
How may I serve you, Master? exe
[ invoke the EXE command ]
Command file? sambud
[ we say SAMBUD, and BUDGET adds your p,pn to it ]
[ the default extension is `EXE' ]
Reading EXE file: SAMBUD.EXE[SYS,BIS]
How may I serve you, Master? Input data file? Reading IN file: SAMBUD.IN[SYS,BIS]
How may I serve you, Master? On or off? How may I serve you, Master? For what
period or month? File name? Writing OUT file: SAMBUD.OUT[SYS,BIS]
[ you will see all the prompts which BUDGET is asking the disk file ]
Successful!
How may I serve you, Master? It has been our pleasure...
*
(kwit)
Exit
↑C
.
You can save a lot of typing (with possible errors) by using EXE.
An EXE file may itself contain EXE commands, permitting nesting but not
recursion.
Interactive commands: OVERHEAD. (Also, the INDIRECT command.)
Overhead (Indirect Costs) are not billed on some accounts.
The OVERHEAD command permits correct projections on such accounts.
A typical dialog is
How may I serve you, Master? OVERHEAD
On or Off? ON
or
How may I serve you, Master? OVERHEAD
On or Off? OFF
The INDIRECT command is identical to the OVERHEAD command.
The default is to charge overhead costs.
The CLEAR command will set OVERHEAD ON.
Interactive commands: PROJECT.
This command orders the BUDGET program to produce a grant projection
based on
(1) expense records taken from an IN file; and
(2) an initial grant status as entered thru a STATUS command.
Both conditions must be met before the PROJECT command can be used.
This command prompts for a PERIOD and an output file.
CAUTION: The PROJECT command will update the initial Grant Status
which will be used for later PROJECT commands. Use STATUS to make
sure that you have the right initial Grant Status before PROJECTing.
An interlock exists between the current grant status and the months for
which you are requesting a PROJECTion. For example, if your status file
was for the end of (01 80) and you issued the PROJECT command for the
period ((03 80)(12 80)), an error would be reported.
Interactive commands: STATUS.
This command is used for entry of the numbers
which represent the current status
of a grant which we want to project.
In addition, you must specify the month and year (e.g. (03 80))
at the end of which the status figures are valid.
This date is used to prevent accidentally projecting
from the wrong starting data.
It prompts for lots of different numbers,
all available from the latest University monthly statement.
Typing these numbers all the time is a drag.
Besides, you'll probably make an error.
Much smarter is to prepare an EXE file
containing both the STATUS command
and the responses to all its prompts.
Check out SAMBUD.GS[SYS,BIS] for an example.
Appendix 1. Detailed budget for inclusion in an NSF proposal.
BUDGET for the Second Year: 11/81 thru 10/82
PROPOSAL TO: National Science Foundation
TITLE: Computer Integrated Assembly Systems
SUBMITTED BY: John McCarthy
Professor of Computer Science
Stanford University
Thomas O Binford
Senior Research Associate
Associate Investigator
A. SALARIES AND WAGES
1. Senior Personnel
John McCarthy (5% Acad Yr) x,xxx
Professor and Principal Investigator
Thomas O Binford (10%) x,xxx
Senior Research Associate
Barry I Soroka (60%) xx,xxx
Research Associate
2. Student Research Assistants (4) 39,930
50% Acad Yr, 100% Summer
3. Support Personnel
a. Engineer (20%) x,xxx
b. Secretary (60%) xx,xxx
_______
Total Salaries & Wages 78,826
B. STAFF BENEFITS 17,118
9/1/81-8/31/82: 21.6%
9/1/82-8/31/83: 22.2%
_______
C. TOTAL SALARIES, WAGES AND STAFF BENEFITS 95,944
D. CAPITAL EQUIPMENT 25,000
(see page 54, "Capital Equipment Justification")
E. EXPENDABLE SUPPLIES AND EQUIPMENT 4,066
F. TRAVEL
1. Foreign 0
2. Domestic 4,620
G. PUBLICATIONS 2,449
H. OTHER COSTS
1. Communication (telephone) 1,964
2. Computer cost 12,593
3. Minor equipment and repair 4,643
_______
I. TOTAL COSTS (A thru H) 151,279
J. INDIRECT COSTS (58% of A thru H, less D) 73,242
_______
K. TOTAL COSTS, Second Year: 11/81 thru 10/82 224,521
Appendix 2. Skeleton budget as produced by BUDGET.
BUDGET for the period 11/81 thru 10/82
Prepared by BIS using BUDGET on 05/06/80 at 10:43:09
PROPOSAL TO:
TITLE:
SUBMITTED BY:
A. SALARIES AND WAGES
1. Senior Personnel
BINFORD xxxx.xx
MCCARTHY xxxx.xx
SOROKA xxxxx.xx
2. Student Research Assistants 39930.44
3. Support Personnel
ENGINEER xxxx.xx
SECRETARY xxxxx.xx
Total Salaries & Wages 78826.82
B. STAFF BENEFITS 17118.77
C. TOTAL SALARIES, WAGES AND STAFF BENEFITS 95945.59
D. CAPITAL EQUIPMENT 25000.00
E. EXPENDABLE SUPPLIES AND EQUIPMENT 4065.59
F. TRAVEL
1. Foreign 0.00
2. Domestic 4620.00
G. PUBLICATIONS 2448.60
H. OTHER COSTS
1. Communication (telephone) 1963.50
2. Computer cost 12593.10
3. Minor equipment and repair 4643.09
I. TOTAL COSTS (A thru H) 151279.50
J. INDIRECT COSTS (58% of A thru H, less D) 73242.11
K. TOTAL COSTS 224521.61
Archived announcements of BUDGET updates.
13-May-80 BIS
Two new commands have been added in order to permit BUDGET
to generate projections of grant accounts
from files of expense descriptions.
The STATUS command prompts the user for the current totals
which represent the starting status of the grant to be projected.
The PROJECT command produces a file containing monthly projections
of the grant for a specified period.
In addition, some new tag fields have been added to input expense descriptions.
This document does not yet describe their use.
If you bug BIS, he'll document the new optional fields.
∂23-May-80 2155 BIS BUDGET Version 017...
To: "@BUDGET.DIS[DIS,BIS]" at SU-AI
... is hereby released.
New features:
CLEAR command wipes out the data previously read in.
An interlock now exists between the grant status and the months for which
you request projections. Thus, the STATUS command requests an additional
item, namely the month at the end of which the grant status figures are
valid. This should prevent serious errors in using the wrong starting
point for a projection.
Check BUDGET.DOC[SYS,BIS] for further information.
∂30-May-80 1853 BIS BUDGET Version 018...
To: "@BUDGET.DIS[DIS,BIS]" at SU-AI
...is hereby released.
The declaration (TITLE NSF-78) will insert the title `NSF-78' onto each
page of the output file for easier identification of output.
The PROJECT command now produces one page person on the grant of the form
Summary of SOROKA on NSF78 from 01/80 thru 03/80
month salary this month to-date
----- ------ ---------- -------
01/80 100% of 1000.00 1000.00 1000.00
02/80 100% of 1000.00 1000.00 2000.00
03/80 100% of 1000.00 1000.00 3000.00
so that mistakes can be more easily spotted.
Further details in BUDGET.DOC[SYS,BIS].
∂04-Jun-80 2036 BIS BUDGET Version 019 ...
To: "@BUDGET.DIS[DIS,BIS]" at SU-AI
... is hereby released.
The OVERHEAD command now permits you to turn on and off the charging of
overhead (indirect costs) in projections. This will allow for accurate
projection of accounts for which overhead is not charged. The default
is to charge overhead.
More information in BUDGET.DOC[SYS,BIS].
∂31-Jul-80 0320 BIS Budget Version 020
To: "@BUDGET.DIS[DIS,BIS]" at SU-AI
fixes a minor mislabelling in output of the BUDGET command, but now documents
the BUDGET and PROJECT command through much better sample files and sample
dialogs. See BUDGET.DOC[SYS,BIS] for the new documentation. Comments etc
to BIS.